'use strict';
const db = uniCloud.database();
const roleCollection = db.collection('role');

exports.main = async (event, context) => {
	// 从事件参数中获取要设置为默认的角色ID
	const { roleId } = event;
	
	// 验证参数 - 尽早返回无效请求
	if (!roleId) {
		return {
			code: 400,
			message: '请提供角色ID'
		};
	}
	
	try {
		// 先检查角色是否存在 - 避免不必要的事务操作
		const roleExist = await roleCollection.doc(roleId).field({ _id: 1 }).get();
		if (roleExist.data.length === 0) {
			return {
				code: 404,
				message: '未找到指定角色'
			};
		}
		
		// 查找当前默认角色 - 只在有默认角色时才执行取消操作
		const defaultRole = await roleCollection.where({ isDefault: 1 }).field({ _id: 1 }).get();
		
		// 如果当前要设置的角色已是默认角色，直接返回成功
		if (defaultRole.data.length > 0 && defaultRole.data[0]._id === roleId) {
			return {
				code: 200,
				message: '该角色已是默认角色',
				data: {
					roleId,
					isDefault: 1
				}
			};
		}
		
		// 开启事务
		const transaction = await db.startTransaction();
		
		try {
			// 只有存在其他默认角色时才执行取消操作
			if (defaultRole.data.length > 0) {
				await transaction.collection('role')
					.where({ isDefault: 1 })
					.update({ isDefault: 2 });
			}
			
			// 将指定角色设为默认
			await transaction.collection('role').doc(roleId).update({
				isDefault: 1
			});
			
			// 提交事务
			await transaction.commit();
			
			return {
				code: 200,
				message: '默认角色设置成功',
				data: {
					roleId,
					isDefault: 1
				}
			};
		} catch (error) {
			await transaction.rollback();
			throw error;
		}
	} catch (error) {
		console.error('设置默认角色失败:', error);
		return {
			code: 500,
			message: '设置默认角色失败',
			error: error.message
		};
	}
};
